(function($){

    $.fn.jBlueGallery = function(opt){
        var e = this,
        elementos = null,
        lista=null,
        num_elementos=0,
        imagens=new Array(),
        obgallery,obloader,obcaption,obimage,atual,
        finalizou = false ,intervalo;
        var options = $.extend({
            'loader':'Carregando imagem...',
            'tempo':10,
            'max_width':null,
            'max_height':null,
            'load_center':true,
            'img_center':true
        },opt);

        this.initGallery = function(){
            atual = 0;
            options.tempo = options.tempo*1000;
            lista = e.children("ul");
            if(lista.length > 0){
                lista.css('display','none');
                elementos = e.find("li");
                num_elementos = elementos.length;
                if(num_elementos > 0){
                    $.each(elementos,function(){
                        imagens.push({
                            'imagem':$.trim($(this).text()),
                            'legenda':$(this).attr("title")
                        });
                    });
                    e.constroi();
                }
            }
        }

        this.constroi = function(){
            if(imagens.length > 0){
                if($(".jbg_gallery").length<1){
                    e.append("<div class=\"jbg_gallery\"></div>");
                    obgallery = $(".jbg_gallery");
                    obgallery.append("<div class=\"jbg_image\"></div>");
                    obgallery.append("<div class=\"jbg_left\"></div>");
                    obgallery.append("<div class=\"jbg_right\"></div>");
                    obgallery.append("<div class=\"jbg_thumb\"></div>");
                    obgallery.append("<div class=\"jbg_loader\"></div>");
                    obgallery.append("<div class=\"jbg_caption\"></div>");
                    obimage = $(".jbg_image");
                    obleft = $(".jbg_left");
                    obright = $(".jbg_right");
                    obthumb = $(".jbg_thumb");
                    obloader = $(".jbg_loader");
                    obcaption = $(".jbg_caption");
                    e.centralizarLoader();
                    e.iniciaExibicao();
                }
            }
        }

        this.showLoader = function(){
            obloader.html(options.loader).fadeIn("slow");
        }

        this.hideLoader = function(){
            obloader.fadeOut("slow");
        }

        this.iniciaExibicao = function(){
            e.showLoader();
            e.carregaImagem(0);
            e.iniciaIntervalo();
        }

        this.verificaTamanho = function(){
            var imagem_atual = obimage.children('img');
            if(options.max_height!=null){
                if(imagem_atual.height() > options.max_height){
                    imagem_atual.css("height",options.max_height);
                }
            }
            if(options.max_width!=null){
                if(imagem_atual.width() > options.max_width){
                    imagem_atual.css("width",options.max_width);
                }
            }
        }

        this.centralizarLoader = function(){
            if(options.load_center == true){
                var esquerda,topo;
                esquerda = (e.width()-obloader.width())/2;
                topo = (e.height()-obloader.height())/2;
                obloader.css({
                    'left':esquerda+'px',
                    'top':topo+'px',
                    'opacity':0.8
                });
            }
        }

        this.centralizarImagem = function(){
            var imagem_atual = obimage.children('img'),esquerda,topo;
            esquerda = (e.width()-parseInt(imagem_atual.css('width')))/2;
            topo = (e.height()-parseInt(imagem_atual.css('height')))/2;
            imagem_atual.css({
                'position':'absolute',
                'left':esquerda+'px',
                'top':topo+'px'
            });
        }

        this.iniciaIntervalo  = function(){
            intervalo = setInterval(function(){
                e.showLoader();
                if(finalizou == true){
                    atual = atual+1;
                    if(atual == num_elementos){
                        atual = 0;
                    }
                    e.carregaImagem(atual);
                    finalizou = false;
                }
            },options.tempo);
        }

        this.showCaption = function(legenda){
            obcaption.css({
                'bottom':'10px',
                'left':'0px;',
                'position':'absolute',
                'width':e.width()+'px',
                'opacity':0.8
            });
            obcaption.html(legenda.toString());
        }

        this.carregaImagem = function(img_num){
            atual = img_num;
            var imagem = new Image(),imagem_antiga = obimage.children("img");
            if(imagem_antiga.length > 0){
                imagem_antiga.fadeOut(1200);
                imagem_antiga.remove();
            }
            obcaption.fadeOut('slow',function(){
                e.showCaption(imagens[img_num].legenda);
            });
            $(imagem).load(function(){
                e.hideLoader();
                $(this).fadeIn("slow",function(){
                    obimage.css("display","none");
                    obimage.append(this);
                    obimage.fadeIn("slow",function(){
                        obcaption.fadeIn('slow');
                    });
                    e.verificaTamanho();
                    e.centralizarImagem();
                    finalizou = true;
                    clearInterval(intervalo);
                    e.iniciaIntervalo();
                });
            }).attr("src",imagens[img_num].imagem);
        }
        return e.initGallery();
    }
})(jQuery);
